/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package svntest;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Enumeration;

/**
 *
 * @author joao paulo
 */

public class Main {
  
    public static void main(String[] args) {
    /*

     Cada um de vocês fará uma modificação específica neste arquivo. Isto simulará o trabalho colaborativo
   que vocês terão, que em muitas vezes se mostrará conflituoso, como neste exemplo, em que todos voces farão modificações no mesmo arquivo.
   A idéia aqui não é saber o que vocês sabem de Java (por isso os métodos sao bem simples de implementar) e sim pedir a vocês que insiram
   funcionalidades dependentes, ou não, umas das outras para que se ambientalizem com a mecânica e os comandos do SVN e também dos eventuais
   conflitos de código.
   
   Bom, este exemplo nada mais é do que extrair logins e hosts dos emails abaixo e exibi-los.Mais abaixo segue as funções que cada um deverá implementar

   IMPORTANTE!! ---> Lembrem-se de realizar o UPDATE no projeto para evitar que modificações feitas por você interfira na
   modificação de um outro colega. Também é recomendado limpar o projeto para não enviar .class e outros "lixos" ao repositório no caso de
   voces escolherem a opção de submeter o projeto como um todo. Caso escolham enviar um único arquivo esse procedimento de limpeza é desnecesário.
   
   */

        String foo = "raquel.aa@gmail.com, yurisalmeida@gmail.com, jpalmeida.uefs@gmail.com, douglaseusilva@gmail.com, bruno_paan@hotmail.com, chaustaluz@hotmail.com";

	ArrayList<String> separatedEmails = splitOut(foo);
	ArrayList<String> logins = extractLogins(separatedEmails);
	ArrayList<String> hosts = extractHosts(separatedEmails);
	Hashtable<String,String> indexedHosts = correlateHosts(hosts);
	formattedOut(logins,indexedHosts);
    }

    //Esse método somente separará os emails (sem vírgulas) em strings individuais e as armazenará em um arraylist de strings
    //formato: login@host.com
    //Responsável: Charlene
    private static ArrayList<String> splitOut(String foo){
        ArrayList<String> listEmails = new ArrayList<String>();     // Cria o arraylist que conterá os e-mails

        String[] emails = foo.split(", ");                          // Quebra a string de e-mails

        for(int i=0; i<= emails.length-1; i++)                      // itera o vetor de e-mails e armazena no arraylist
            listEmails.add(emails[i]);                              // adiciona os e-mails aoo arraylist
        return listEmails;                                          // retorna para quem chamou
    }

    //Este método extrairá da lista de emails os logins de cada email e os armazenará em outro arraylist de strings
    //Responsável: Douglas
    private static ArrayList<String> extractLogins(ArrayList<String> emails) {

        ArrayList<String> logins = new ArrayList();
        String[] vetor_aux;
        //Issu em um comentairio!!!!!

        //Separa atraves do split
        //Em cada posição do arraylist, dar o split com o separador '@' e pegar o lado esquerdo da string, ou seja, a posição zero do vetor_aux
        for(int i=0;i <= emails.size();i++){
            vetor_aux = emails.get(i).split("@");
            logins.add(vetor_aux[0]);
        }
        
        return logins;
    }

    //Este método extrairá da lista de emails os hosts de cada email e os armazenará em outro arraylist de strings
    //formato: host (sem o ".com")
    //Responsável: Kaio
    private static ArrayList<String> extractHosts(ArrayList<String> emails) {    
       ArrayList<String> hosts = new  ArrayList();
        String[] aux = new String[2];
        //System.out.println(emails.size());
        for (int i=0; i<emails.size(); i++)
        {
            aux = emails.get(i).split("@"); // separa os logins dos hosts
            //System.out.println(aux[0]);
            //System.out.println(aux[1]);
            aux = aux[1].split(".com"); // filtra os hosts
            hosts.add(aux[0]);          // adiciona a string que representa o host no arrayList
            //System.out.println(aux[0]);
        }

        return hosts;
    }

    //Este método correlacionará os hosts extraídos com as respectivas urls destes host (podem inserir as urls manualmente mesmo :) )
    //formato (na hashtable): host,url ex: hotmail,www.hotmail.com
    //Responsável: Yuri
    //Modifiquei ^^
    private static Hashtable<String,String> correlateHosts(ArrayList<String> hosts) {
       
    Hashtable indexedHosts = new Hashtable<String,String>();
       
       for(int i =0; i<hosts.size();i++){
           indexedHosts.put(hosts.get(i),"www." + hosts.get(i) + ".com");
       }

       return indexedHosts;       
    }

    //E este método somente exibirá as informações extraídas anteriormente no formato:
    //Login:login  host: host	link: url
    //Responsável: Bruno (é, eu mesmo fiz esse)
    private static void formattedOut(ArrayList<String> logins, Hashtable<String,String> indexedHosts) {
            Enumeration keyEnum = indexedHosts.keys();// enumera as keys da hash
            Enumeration elementEnum = indexedHosts.elements();// enumera os elementos da hash
            while (keyEnum.hasMoreElements()) // (não entendi muito bem) enquanto houver elementos:
                
        {
            int i = 0; // para inicializar o arraylist login           
            System.out.println("Login: " + logins.get(i)); //imprime login
            System.out.println("Host: " + keyEnum.nextElement());// imprime host e aponta o proximo
            System.out.println("Link: " + elementEnum.nextElement());// imprime link e aponta o proximo
            i++;// incrementa o arraylist 
        }

            
    }
}
